#include <sched.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <pthread.h>

int *p = nullptr;

void *threadrun(void *args)
{
    int a = 123;

    p = &a;

    while(true) {sleep(1);}
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, threadrun, nullptr);
    sleep(2);
    while(true)
    {
        std::cout << "*p : " << *p << std::endl;
        sleep(1);
    }

    pthread_join(tid, nullptr);
    return 0;
}



// #define STACK_SIZE (1024 * 1024) // 1MB 的栈空间

// // 进程间通信 退出码
// // 子进程执行的函数
// static int child_func(void *arg)
// {
//     while (true)
//     {
//         printf("Child process: PID = %d\n", getpid());
//         sleep(1);
//     }
//     return 0;
// }

// int main()
// {
//     char *stack = (char *)malloc(STACK_SIZE); // 为子进程分配栈空间
//     if (stack == NULL)
//     {
//         perror("malloc");
//         exit(EXIT_FAILURE);
//     }

//     // 使用 clone 创建子进程
//     pid_t pid = clone(child_func, stack + STACK_SIZE, CLONE_VM | SIGCHLD, NULL);
//     if (pid == -1)
//     {
//         perror("clone");
//         free(stack);
//         exit(EXIT_FAILURE);
//     }

//     printf("Parent process: PID = %d, Child PID = %d\n", getpid(), pid);

//     // 等待子进程结束
//     if (waitpid(pid, NULL, 0) == -1)
//     {
//         perror("waitpid");
//         free(stack);
//         exit(EXIT_FAILURE);
//     }

//     free(stack);
//     return 0;
// }



